import Vue from 'vue'
import VueRouter from 'vue-router'
import hooks from './hooks';
const originPush=VueRouter.prototype.push;
VueRouter.prototype.push=function push(location){
 return originPush.call(this,location).catch(err=>console.log(err));
}
Vue.use(VueRouter);


// require.context函数接受三个参数

// directory {String} -读取文件的路径

// useSubdirectories {Boolean} -是否遍历文件的子目录

// regExp {RegExp} -匹配文件的正则

// false 不查找子目录

// 同时files作为一个函数,也接受一个req参数,这个和resolve方法的req参数是一样的,
// 即匹配的文件名的相对路径,而files函数返回的是一个模块,这个模块才是真正我们需要的

const files = require.context('./', false, /\.router.js$/);
console.log(files, 'files')
// 值得注意的是require.context函数执行后返回的是一个函数,并且这个函数有3个属性
const routes = [];
// keys {Function} -返回匹配成功模块的名字组成的数组
files.keys().forEach(key => {
  routes.push(...files(key).default);
});
console.log(routes, 'routes');

// 入口文件
const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes//实现路由的模块化
});
console.log(process.env, 'process.env');

Object.values(hooks).forEach(hook=>{
  router.beforeEach(hook.bind(router)); // 将this绑定成router
});

export default router



// vue的路由配置：router-link   router-view   this.$router.push   this.$router.params.query

// vue的路由守卫：全局路由守卫  beforeEach(to,from,next)    局部的路由守卫: beforeEnter(to,from,next)

// vue的路由鉴权：meta{isAutch:true:false}

// token   模拟  localStorage



// react的路由配置 NavLink  Route Switch  Redirect withRouter HasnRouter BorwerRouter  Link  exact

// 路由参数：this.props.match,params.参数    this.props.history.push()

// 路由守卫：render={()=>{reten <路由/>}}  简单守卫

